1 Création de fonctions pour simplifier le code

remove_attribut_g <- function(variable) {
  variable <- filter(variable, ame_g != "DOUBLE SENS CYCLABLE" & ame_g != "AMENAGEMENT MIXTES PIETON VELO HORS VOIE VERTE" & ame_g != "AUCUN" & ame_g != "AUTRE" & ame_g != "GOULOTTE")
  return(variable)
}

remove_attribut_d <- function(variable) {
  variable <- filter(variable, ame_d != "DOUBLE SENS CYCLABLE" & ame_d != "AMENAGEMENT MIXTES PIETON VELO HORS VOIE VERTE" & ame_d != "AUCUN" & ame_d != "AUTRE" & ame_d != "GOULOTTE")
  return(variable)
}

remove_attribut <- function(variable) {
  variable <- remove_attribut_g(variable)
  variable <- remove_attribut_d(variable)
  return(variable)
}

2 Carte de la localisation des accidents de vélo à Bordeaux et des pistes cyclabes.

# Filtrer les données pour ne conserver que les lignes où catv == 1 ou catv == 80
acc_21_veh <- filter(acc_21_veh, catv == 1 | catv == 80)
acc_21_car <- filter(acc_21_car, com == 33063)
vel_21_g <- remove_attribut_g(vel_21)
vel_21_d <- remove_attribut_d(vel_21)
#vel_21 <- remove_attribut(vel_21)

# Vérifier les premières lignes des données filtrées
print(head(acc_21_veh))
##        Num_Acc id_vehicule num_veh senc catv obs obsm choc manv motor occutc
## 1 202300000017 155 680 527     B01    2    1   0    2    1   13     5     NA
## 2 202300000025 155 680 513     C01    0    1   0    0    0    2     5     NA
## 3 202300000026 155 680 512     B01    1   80   0    2    0    1     3     NA
## 4 202300000033 155 680 500     B01    1    1   0    2    0    2     5     NA
## 5 202300000033 155 680 501     A01    1    1   0    2    0   26     5     NA
## 6 202300000042 155 680 487     A01    0    1   0    1    1    2     5     NA
print(head(acc_21_car))
##        Num_Acc jour mois   an  hrmn lum dep   com agg int atm col
## 1 202300000892    2    5 2023 10:45   1  33 33063   2   2   1   6
## 2 202300001096    4    5 2023 11:15   1  33 33063   2   2   7   2
## 3 202300001201   28   11 2023 22:50   5  33 33063   2   1   1   3
## 4 202300001206   28   11 2023 18:30   5  33 33063   2   3   1   3
## 5 202300001212   28   11 2023 15:30   1  33 33063   2   3   1   2
## 6 202300001509    9    6 2023 19:50   1  33 33063   1   1   1   2
##                         adr      lat      long
## 1                Rue Tastet 44.83502 -0.582220
## 2          Avenue de Verdun 44.83878 -0.626070
## 3 Boulevard des Frères Moga 44.82302 -0.542340
## 4    Cours Edouard Vaillant 44.86335 -0.561310
## 5    Boulevard Alfred Daney 44.86749 -0.572410
## 6              ROCADE A 630 44.88012 -0.537914
# Réaliser la jointure attributaire avec l'argument relationship
acc_21_car_veh <- inner_join(acc_21_car, acc_21_veh, by = "Num_Acc", relationship = "many-to-many")

# Vérifier les premières lignes du résultat de la jointure
#print(head(result))

# Convertir les données en objet spatial
acc_21_car_veh_sf <- st_as_sf(acc_21_car_veh, coords = c("long", "lat"), crs = 4326)

#Création tampon (géotratement)
#vel_21_g_buffer <- st_buffer(vel_21_g, dist = 10)
vel_21_d_buffer <- st_buffer(vel_21_d, dist = 10)

#vel_21_buffer <- st_buffer(vel_21, dist = 10)

# Effectuer une jointure spatiale pour compter les entités dans chaque tampon
#jointure_vel_acc_g <- st_join(vel_21_g_buffer, acc_21_car_veh_sf, join = st_intersects)
jointure_vel_acc_d <- st_join(vel_21_d_buffer, acc_21_car_veh_sf, join = st_intersects)

# Compter le nombre d'entités dans chaque tampon
#entites_count_vel_acc_d <- jointure_vel_acc_d %>%
#  group_by(id_osm) %>%  # Assurez-vous que 'id_osm' est l'identifiant correct
#  summarise(nombre_entites = n())

# Aperçue des données chargées

mapview(vel_21_g, zcol = "ame_g", color = c("#0e3f5d", "#1f5e70", "#387d84", "#64a69a", "#8bc2af", "#b1dbc5")) + mapview(vel_21_d, zcol = "ame_d", color = c("#0e3f5d", "#1f5e70", "#8bc2af", "#b1dbc5","#d1fbd5")) + mapview(acc_21_car_veh_sf, color = "red")
## Warning: Found less unique colors (6) than unique zcol values (8)! 
## Recycling color vector.
## Warning: Found less unique colors (5) than unique zcol values (7)! 
## Recycling color vector.

2.1 Graphique du nombre d’accidents par type de voie cyclable en 2023

var = c("BANDE CYCLABLE", "COULOIR BUS+VELO", "DOUBLE SENS CYCLABLE BANDE", "DOUBLE SENS CYCLABLE PISTE", "PISTE CYCLABLE", "VOIE VERTE")
Nb_acc <- c(0, 0, 0, 0, 0, 0)
df <- data.frame(var, Nb_acc)

# Compter le nombre d'accidents par type de voie cyclable
for (i in 1:nrow(jointure_vel_acc_d)) {
  if (is.na(jointure_vel_acc_d$Num_Acc[i])) {
    next
  }
  if (jointure_vel_acc_d$ame_d[i] == "BANDE CYCLABLE") {
    df$Nb_acc[1] <- df$Nb_acc[1] + 1
  } else if (jointure_vel_acc_d$ame_d[i] == "COULOIR BUS+VELO") {
    df$Nb_acc[2] <- df$Nb_acc[2] + 1
  } else if (jointure_vel_acc_d$ame_d[i] == "DOUBLE SENS CYCLABLE BANDE") {
    df$Nb_acc[3] <- df$Nb_acc[3] + 1
  } else if (jointure_vel_acc_d$ame_d[i] == "DOUBLE SENS CYCLABLE PISTE") {
    df$Nb_acc[4] <- df$Nb_acc[4] + 1
  } else if (jointure_vel_acc_d$ame_d[i] == "PISTE CYCLABLE") {
    df$Nb_acc[5] <- df$Nb_acc[5] + 1
  } else if (jointure_vel_acc_d$ame_d[i] == "VOIE VERTE") {
    df$Nb_acc[6] <- df$Nb_acc[6] + 1
  }
}

# Créer le graphique
ggplot(data = df, mapping = aes(x = var, y = Nb_acc)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "Nombre d'accidents par type de voie cyclable",
       x = "Type de voie cyclable",
       y = "Nombre d'accidents") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))